A general issue when implementing application availability frameworks around an operating system process model (e.g., the UNIX process model) is how to track all of the descendants of an application's initial process. Historically, UNIX-derived operating systems have added new services in an organic fashion in response to new hardware capabilities, new forms of connectivity, or new application types. This approach has resulted in a collection of mostly independent processes providing a set of capabilities on each operating system. With the emergence of network connections and more complex hardware platforms, these processes have grown large networks of implicit or explicit dependencies that are not easily expressed in the process model offered by the operating system.
In typical UNIX-derived operating systems, a process only knows about the first generation of processes that descend from that process. A process is generally unaware of any descendants of this first generation. An approach to track additional levels of descendants is to use debugging or interposition techniques to modify the way an operating system creates one or more processes, such as the fork operation. Another approach is to use the /proc filesystem (i.e., the pseudo filesystem implementation of an operating system process model) to trace every creation (or re-creation) of a process, such as when the fork operation creates offspring. Existing UNIX process collectives, such as the process group, the session, or the task, may also be used to track descendants but these mechanisms either force the initial process to be the leader and the effective administration handle for the collective, or provide no observation model. Generally, when the initial process is the administration handle for the collective, if that process dies, all information regarding the descendants could be lost.